🚀 Mac 实战:将 Android 模拟器 ADB 端口暴露给局域网
在进行 Android 远程调试或群控开发时,我们经常需要让局域网内的其他电脑(或 CI/CD 服务器)连接到 Mac 上运行的 Android 模拟器。

在进行 Android 远程调试或群控开发时,我们经常需要让局域网内的其他电脑(或 CI/CD 服务器)连接到 Mac 上运行的 Android 模拟器。
由于模拟器默认只监听本地回环地址(127.0.0.1),局域网无法直接访问。本文将通过 adb forward 配合 socat 端口转发工具来解决这个问题。
🛠️ 第一步:环境准备与模拟器启动
1. 安装 Android Studio
前往 Google 官网下载并安装 Android Studio for Mac。
2. 创建并启动模拟器
打开 Android Studio -> Device Manager,创建一个新的虚拟设备(AVD)并启动它。确保模拟器已正常运行进入桌面。
3. 安装网络转发工具 Socat
我们需要 socat 来打通 局域网 IP 到 127.0.0.1 的桥梁。 使用 Homebrew 安装:
brew install socat
⚙️ 第二步:配置 ADB 端口映射
我们需要先将 Mac 的本地端口映射到模拟器的内部端口,然后再将局域网端口映射到 Mac 的本地端口。
1. 检查设备连接
确保 ADB 能识别到模拟器:
adb devices
# 输出示例:
# List of devices attached
# emulator-5554 device
2. 开启远程调试监听(可选)
虽然模拟器通常默认开启,但执行此命令可确保服务在 5555 端口就绪:
adb tcpip 5555
3. 设置本地端口转发 (Host -> Emulator)
将 Mac 本地的 1555 端口流量转发到模拟器的 5555 端口:
adb forward tcp:1555 tcp:5555
此时,你通过 adb connect 127.0.0.1:1555 已经可以连接模拟器了,但这仅限本机。
🌐 第三步:开启局域网转发 (LAN -> Host)
现在使用 socat 将局域网 IP 的端口转发到刚才配置的 127.0.0.1:1555。
1. 获取局域网 IP
在终端输入 ifconfig | grep inet 查看你的局域网 IP(假设为 10.0.8.2)。
2. 启动 Socat 转发
# 语法:socat TCP-LISTEN:[局域网端口],bind=[局域网IP],fork TCP:127.0.0.1:[本地映射端口]
socat TCP-LISTEN:1555,bind=10.0.8.2,fork TCP:127.0.0.1:1555
注意:运行此命令后终端会挂起(监听状态),请不要关闭窗口,或者使用
nohup让其在后台运行。
🤖 第四步:自动化保活脚本
ADB 的 Forward 规则有时会因为模拟器重启或 ADB 服务重置而失效。我们可以使用以下脚本进行自动检测和重连。
优化后的脚本 (auto_forward.sh):
#!/bin/bash
# 配置部分
ADB_PATH="$HOME/Library/Android/sdk/platform-tools/adb" # ADB 路径,建议根据实际情况修改
LOCAL_PORT=1555
EMULATOR_PORT=5555
# 检查 ADB 是否存在
if [ ! -f "$ADB_PATH" ]; then
echo "❌ 错误: 未找到 adb,请检查路径: $ADB_PATH"
# 如果已配置环境变量,尝试直接使用 adb 命令
ADB_PATH="adb"
fi
echo "🚀 开始监控 ADB 端口转发..."
# 1. 检查是否有设备连接
if ! "$ADB_PATH" devices | grep -q "device"; then
echo "⚠️ 错误: 未检测到在线的 Android 设备,请先启动模拟器。"
exit 1
fi
# 2. 进入无限循环监控
while true; do
# 检查转发规则是否存在
# adb forward --list 输出示例:emulator-5554 tcp:1555 tcp:5555
if ! "$ADB_PATH" forward --list | grep -q "tcp:$LOCAL_PORT tcp:$EMULATOR_PORT"; then
echo "🔄 [$(date +%T)] 转发失效或未建立,正在尝试重连..."
# 尝试建立转发
if "$ADB_PATH" forward tcp:$LOCAL_PORT tcp:$EMULATOR_PORT; then
echo "✅ [$(date +%T)] 转发成功: 127.0.0.1:$LOCAL_PORT -> Emulator:$EMULATOR_PORT"
else
echo "❌ [$(date +%T)] 转发失败,请检查端口占用或设备状态。"
fi
else
# 可选:如果不需要频繁输出日志,可以注释掉下面这行
# echo "✅ [$(date +%T)] 转发状态正常"
:
fi
sleep 10 # 每10秒检查一次
done
使用方法:
- 保存为
auto_forward.sh。 - 赋予执行权限:
chmod +x auto_forward.sh。 - 运行脚本:
./auto_forward.sh。
✅ 验证连接
现在,在局域网内的另一台电脑上,执行以下命令即可连接你的 Mac 模拟器:
# 假设 Mac 的 IP 是 10.0.8.2
adb connect 10.0.8.2:1555
如果连接成功,你就可以像操作本地设备一样进行调试了!